// 循环控制：结合Breaks类实现图书借阅资格审核（中断/继续）
import scala.util.control.Breaks._

object LoopControlDemo extends App {
  // 定义读者样例类：存储读者资格相关信息
  case class Reader(
                     id: String,
                     name: String,
                     unpaidFines: Double,    // 未缴罚款
                     hasOverdueBooks: Boolean,  // 是否有超期未还图书
                     daysOverdue: Int,       // 超期天数
                     isActive: Boolean       // 是否为有效读者
                   )

  // 创建测试读者：有未缴罚款、轻微超期、有效读者
  val reader = Reader(
    "R2025001",
    "张三",
    30.0,   // 未缴罚款30元（<50元上限）
    true,   // 有超期图书
    1,      // 超期1天（轻微违规）
    true    // 有效读者
  )

  println(s"开始审核读者 ${reader.name}（${reader.id}）的借阅资格...")

  // 定义审核项列表
  val checks = List(
    "检查是否为有效读者",
    "检查未缴罚款金额",
    "检查是否有超期未还图书",
    "检查超期天数"
  )

  var checkPassed = true  // 整体审核是否通过
  var checkIndex = 0      // 当前审核项索引

  // while循环：多步骤审核（未到最后一项且未失败则继续）
  while (checkIndex < checks.length && checkPassed) {
    println(s"\n审核项 ${checkIndex + 1}：${checks(checkIndex)}")

    // breakable代码块：定义可中断的范围
    breakable {
      checkIndex match {
        // 审核项1：检查是否为有效读者
        case 0 =>
          if (!reader.isActive) {
            println("审核不通过：非有效读者")
            checkPassed = false  // 标记审核失败
            break()  // 中断当前审核项处理，进入下一轮循环
          }
          println("审核通过")

        // 审核项2：检查未缴罚款（超50元立即中断）
        case 1 =>
          if (reader.unpaidFines > 50) {
            println(s"审核不通过：未缴罚款 ${reader.unpaidFines} 元，超过50元上限")
            checkPassed = false
            break()  // 中断审核，拒绝借阅
          } else if (reader.unpaidFines > 0) {
            println(s"警告：有未缴罚款 ${reader.unpaidFines} 元，请及时缴纳")
            // 不中断，继续后续审核
          }
          println("审核通过")

        // 审核项3：检查是否有超期图书（不中断，继续检查天数）
        case 2 =>
          if (reader.hasOverdueBooks) {
            println("发现有超期未还图书")
            // 不中断，进入下一个审核项（检查超期天数）
          } else {
            println("审核通过")
            break()  // 无超期图书，提前结束当前审核项
          }

        // 审核项4：检查超期天数（超7天则失败）
        case 3 =>
          if (reader.daysOverdue > 7) {
            println(s"审核不通过：图书已超期 ${reader.daysOverdue} 天，超过7天")
            checkPassed = false
          } else if (reader.daysOverdue > 0) {
            println(s"警告：图书已超期 ${reader.daysOverdue} 天，请尽快归还")
            println("审核通过")
          } else {
            println("审核通过")
          }
      }
    }

    checkIndex += 1  // 进入下一个审核项
  }

  // 输出最终审核结果
  println(s"\n===== 审核结果 =====")
  if (checkPassed) {
    println(s"读者 ${reader.name} 符合借阅条件，可以借书")
  } else {
    println(s"读者 ${reader.name} 不符合借阅条件，无法借书")
  }
}
